
 1000  *SAVE S.MULTIPLY 8X8
 1010  *--------------------------------
 1020  CAND   .EQ 2
 1030  PLIER  .EQ 3
 1040  PROD   .EQ 4,5
 1050  *--------------------------------
 1060  *   FAST 6502 MULTIPLICATION, BY DAMON SLYE
 1070  *   CALL APPLE, JUNE 1983, P45-48.
 1080  *      (A-REG) = MULTIPLIER
 1090  *      (X-REG) = MULTIPLICAND
 1100  *      RETURNS PRODUCT IN A,X (X=LO-BYTE)
 1110  *--------------------------------
 1120  FAST.8X8.SLYE
 1130         CPX #0
 1140         BEQ .3       A*0=0
 1150         DEX          DECR. CAND TO AVOID
 1160         STX CAND        THE CLC BEFORE ADC CAND
 1170         LSR          PREPARE FIRST BIT
 1180         STA PLIER
 1190         LDA #0
 1200         LDX #8
 1210  .1     BCC .2       NO ADD
 1220         ADC CAND
 1230  .2     ROR
 1240         ROR PLIER
 1250         DEX
 1260         BNE .1
 1270         LDX PLIER
 1280         RTS
 1290  .3     TXA
 1300         RTS
 1310  *--------------------------------
 1320  FAST.8X8.RBSC
 1330         CPX #0
 1340         BEQ .3       A*0=0
 1350         DEX          DECR. CAND TO AVOID
 1360         STX CAND        THE CLC BEFORE ADC CAND
 1370         LSR          PREPARE FIRST BIT
 1380         STA PLIER
 1390         LDA #0
 1400         LDX #4
 1410  .1     BCC .2       NO ADD
 1420         ADC CAND
 1430  .2     ROR
 1440         ROR PLIER
 1450         BCC .25      NO ADD
 1460         ADC CAND
 1470  .25    ROR
 1480         ROR PLIER
 1490         DEX
 1500         BNE .1
 1510         LDX PLIER
 1520         RTS
 1530  .3     TXA
 1540         RTS
 1550  *--------------------------------
 1560         .OP 65816
 1570  *--------------------------------
 1580  *      MULTIPLIER IN A(15-8), MULTIPLICAND IN A(7-0)
 1590  *      RETURN PRODUCT IN A(15-0)
 1600  *--------------------------------
 1610  MULTIPLY.8X8.65802
 1620         PHX
 1630         STA .2+1     SAVE MULTIPLICAND
 1640         LDA #0
 1650         CLC
 1660         XCE
 1670         LDX #8
 1680         REP #$20     A-REG 16 BITS
 1690         EOR ##$FF00  COMPLEMENT MULTIPLIER
 1700  .1     ASL
 1710         BCS .3       ...IF ORIGINAL BIT=0
 1720  .2     ADC ##0      ADD MULTIPLICAND
 1730  .3     DEX
 1740         BNE .1
 1750         SEC
 1760         XCE
 1770         PLX
 1780         RTS
 1790  *--------------------------------
 1800         .LIF

